//一个整数 num 的 k 美丽值定义为 num 中符合以下条件的 子字符串 数目： 
//
// 
// 子字符串长度为 k 。 
// 子字符串能整除 num 。 
// 
//
// 给你整数 num 和 k ，请你返回 num 的 k 美丽值。 
//
// 注意： 
//
// 
// 允许有 前缀 0 。 
// 0 不能整除任何值。 
// 
//
// 一个 子字符串 是一个字符串里的连续一段字符序列。 
//
// 
//
// 示例 1： 
//
// 
//输入：num = 240, k = 2
//输出：2
//解释：以下是 num 里长度为 k 的子字符串：
//- "240" 中的 "24" ：24 能整除 240 。
//- "240" 中的 "40" ：40 能整除 240 。
//所以，k 美丽值为 2 。
// 
//
// 示例 2： 
//
// 
//输入：num = 430043, k = 2
//输出：2
//解释：以下是 num 里长度为 k 的子字符串：
//- "430043" 中的 "43" ：43 能整除 430043 。
//- "430043" 中的 "30" ：30 不能整除 430043 。
//- "430043" 中的 "00" ：0 不能整除 430043 。
//- "430043" 中的 "04" ：4 不能整除 430043 。
//- "430043" 中的 "43" ：43 能整除 430043 。
//所以，k 美丽值为 2 。
// 
//
// 
//
// 提示： 
//
// 
// 1 <= num <= 10⁹ 
// 1 <= k <= num.length （将 num 视为字符串） 
// 
//
// Related Topics 数学 字符串 滑动窗口 👍 55 👎 0


package LeetCode.editor.cn;


/**
 * @author ldltd
 * @date 2025-03-10 15:55:01
 * @description 2269.找到一个数字的 K 美丽值
 
 */
 
public class FindTheKBeautyOfANumber {
    public static void main(String[] args) {
    //测试代码
    FindTheKBeautyOfANumber fun = new FindTheKBeautyOfANumber();
    Solution solution= fun.new Solution();
    
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int divisorSubstrings(int num, int k) {
        String str=String.valueOf(num);
        int res=0;
        for (int i = k-1; i < str.length(); i++) {
            int t = Integer.parseInt(str.substring(i - k + 1, i + 1));
            if(t==0) continue;
            res+=(num% t ==0?1:0);
        }
        return res;
    }
    //数学
    public int divisorSubstrings1(int num, int k) {
        long m=(long)Math.pow(10,k);
        int res=0;
        //一开始计算的是最右边的长为k的子串，每次结束后/10，直到i的十进制长度不满足k
        for (int i = num; i>=m/10; i/=10) {
            int t=(int)(i%m);
            if(t>0&&num%t==0){
                res++;
            }
        }
        return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
